<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
	<title>用聚合分析结果 | ElasticSearch 7.7 权威指南中文版</title>
	<meta name="keywords" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <meta name="description" content="ElasticSearch 权威指南中文版, elasticsearch 7, es7, 实时数据分析，实时数据检索" />
    <!-- Give IE8 a fighting chance -->
    <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
    <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
	<link rel="stylesheet" type="text/css" href="../static/styles.css" />
	<script>
	var _link = 'getting-started-aggregations.html';
    </script>
</head>
<body>
<div class="main-container">
    <section id="content">
        <div class="content-wrapper">
            <section id="guide" lang="zh_cn">
                <div class="container">
                    <div class="row">
                        <div class="col-xs-12 col-sm-8 col-md-8 guide-section">
                            <div style="color:gray; word-break: break-all; font-size:12px;">原英文版地址: <a href="https://www.elastic.co/guide/en/elasticsearch/reference/7.7/getting-started-aggregations.html" rel="nofollow" target="_blank">https://www.elastic.co/guide/en/elasticsearch/reference/7.7/getting-started-aggregations.html</a>, 原文档版权归 www.elastic.co 所有<br/>本地英文版地址: <a href="../en/getting-started-aggregations.html" rel="nofollow" target="_blank">../en/getting-started-aggregations.html</a></div>
                        <!-- start body -->
                  <div class="page_header">
<strong>重要</strong>: 此版本不会发布额外的bug修复或文档更新。最新信息请参考 <a href="https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html" rel="nofollow">当前版本文档</a>。
</div>
<div id="content">
<div class="breadcrumbs">
<span class="breadcrumb-link"><a href="index.html">Elasticsearch 权威指南 [7.7]</a></span>
»
<span class="breadcrumb-link"><a href="getting-started.html">开始使用 Elasticsearch</a></span>
»
<span class="breadcrumb-node">用聚合分析结果</span>
</div>
<div class="navheader">
<span class="prev">
<a href="getting-started-search.html">« 开始搜索</a>
</span>
<span class="next">
<a href="getting-started-next-steps.html">下一步做什么 »</a>
</span>
</div>
<div class="chapter">
<div class="titlepage"><div><div>
<h2 class="title">
<a id="getting-started-aggregations"></a>用聚合分析结果
</h2>
</div></div></div>
<p>
Elasticsearch 聚合使你能够获取有关搜索结果的元信息，并能回答诸如“德克萨斯州有多少帐户持有人”或“纳西州的平均帐户余额是多少？”这样的问题。

你可以在一个请求中搜索文档、过滤命中并能使用聚合分析结果。
</p>
<p>
比如，下面这个请求使用一个 <code class="literal">terms</code> 聚合将索引 <code class="literal">bank</code> 中的所有账户按州分组，并按降序返回账户最多的前 10 个州。 
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword"
      }
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/10.console"></div>
<p>
响应中的 <code class="literal">桶 (buckets)</code> 是字段 <code class="literal">state</code> 的值。

<code class="literal">doc_count</code> 显示每个州的账户数量。

比如，你可以看到在 <code class="literal">ID</code> (Idaho) 州有 27 个账户。

因为请求中设置了 <code class="literal">size=0</code>，所以响应中只包含聚合的结果<span style="color:#666;">(译者注: aggregations部分有数据，而hits.hits为空)</span>。
</p>
<div class="pre_wrapper lang-console-result">
<pre class="programlisting prettyprint lang-console-result">{
  "took": 29,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "skipped" : 0,
    "failed": 0
  },
  "hits" : {
     "total" : {
        "value": 1000,
        "relation": "eq"
     },
    "max_score" : null,
    "hits" : [ ]
  },
  "aggregations" : {
    "group_by_state" : {
      "doc_count_error_upper_bound": 20,
      "sum_other_doc_count": 770,
      "buckets" : [ {
        "key" : "ID",
        "doc_count" : 27
      }, {
        "key" : "TX",
        "doc_count" : 27
      }, {
        "key" : "AL",
        "doc_count" : 25
      }, {
        "key" : "MD",
        "doc_count" : 25
      }, {
        "key" : "TN",
        "doc_count" : 23
      }, {
        "key" : "MA",
        "doc_count" : 21
      }, {
        "key" : "NC",
        "doc_count" : 21
      }, {
        "key" : "ND",
        "doc_count" : 21
      }, {
        "key" : "ME",
        "doc_count" : 20
      }, {
        "key" : "MO",
        "doc_count" : 20
      } ]
    }
  }
}</pre>
</div>
<p>
你可以组合聚合以构建更复杂的数据摘要。

比如，下面这个请求在前一个 <code class="word">group_by_state</code> 聚合中嵌套一个 <code class="literal">avg</code> 聚合，以计算每个状态的平均账户余额。
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword"
      },
      "aggs": {
        "average_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/11.console"></div>
<p>
与按结果的计数排序不同，你可以使用嵌套聚合的结果进行排序，方法是在 <code class="literal">terms</code> 聚合中指定顺序：
</p>
<div class="pre_wrapper lang-console">
<pre class="programlisting prettyprint lang-console">GET /bank/_search
{
  "size": 0,
  "aggs": {
    "group_by_state": {
      "terms": {
        "field": "state.keyword",
        "order": {
          "average_balance": "desc"
        }
      },
      "aggs": {
        "average_balance": {
          "avg": {
            "field": "balance"
          }
        }
      }
    }
  }
}</pre>
</div>
<div class="console_widget" data-snippet="snippets/12.console"></div>
<p>
除了这些基本的<em>桶(bucket)</em> 和 <em>度量聚合(metrics aggregation) </em> 之外，Elasticsearch 还提供了专门的聚合，用于操作 <em>多字段(multiple fields)</em> 和分析特定类型的数据，如日期、IP地址和地理数据。

你还可以将单个聚合的结果输入管道聚合以进行进一步分析。
</p>
<p>
聚合提供的核心分析功能支持高级特性，比如使用机器学习来检测异常。
</p>
</div>
<div class="navfooter">
<span class="prev">
<a href="getting-started-search.html">« 开始搜索</a>
</span>
<span class="next">
<a href="getting-started-next-steps.html">下一步做什么 »</a>
</span>
</div>
</div>

                  <!-- end body -->
                        </div>
                        <div class="col-xs-12 col-sm-4 col-md-4" id="right_col">
                        
                        </div>
                    </div>
                </div>
            </section>
        </div>
    </section>
</div>
<script src="../static/cn.js"></script>
</body>
</html>